﻿using Outils.DateHeure;
#if !NUNIT
using Microsoft.VisualStudio.TestTools.UnitTesting;
#else
using NUnit.Framework;
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
using ClassInitialize = NUnit.Framework.TestFixtureSetUpAttribute;
using ClassCleanup = NUnit.Framework.TestFixtureTearDownAttribute;
using TestContext = NUnit.Framework.Text;
#endif
using System;

namespace OutilsTests
{


    /// <summary>
    ///Classe de test pour DateTest, destinée à contenir tous
    ///les tests unitaires DateTest
    ///</summary>
    [TestClass()]
    public class DateTest
    {

        private TestContext testContextInstance;

        /// <summary>
        ///Obtient ou définit le contexte de test qui fournit
        ///des informations sur la série de tests active ainsi que ses fonctionnalités.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Attributs de tests supplémentaires
        // 
        //Vous pouvez utiliser les attributs supplémentaires suivants lors de l'écriture de vos tests :
        //
        //Utilisez ClassInitialize pour exécuter du code avant d'exécuter le premier test dans la classe
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //Utilisez ClassCleanup pour exécuter du code après que tous les tests ont été exécutés dans une classe
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //Utilisez TestInitialize pour exécuter du code avant d'exécuter chaque test
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //Utilisez TestCleanup pour exécuter du code après que chaque test a été exécuté
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion


        /// <summary>
        /// Test pour RetourneNombreJoursDepuisJanvier
        ///</summary>
        [TestMethod()]
        public void RetourneNombreJoursDepuisJanvierTest()
        {
            DateTime date = new DateTime();
            int expected = 0;
            int actual;
            actual = Date.RetourneNombreJoursDepuisJanvier( date );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour RetourneNombreJoursAnnee
        ///</summary>
        [TestMethod()]
        public void RetourneNombreJoursAnneeTest()
        {
            DateTime dateDebut = new DateTime();
            DateTime dateFin = new DateTime();
            int expected = 0;
            int actual;
            actual = Date.RetourneNombreJoursAnnee( dateDebut, dateFin );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour RetourneNombreJours
        ///</summary>
        [TestMethod()]
        public void RetourneNombreJoursTest()
        {
            DateTime dateDebut = new DateTime();
            DateTime dateFin = new DateTime();
            int expected = 0;
            int actual;
            actual = Date.RetourneNombreJours( dateDebut, dateFin );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour RetourneDateConvertie
        ///</summary>
        [TestMethod()]
        public void RetourneDateConvertieTest()
        {
            string date = "06/09/2009";
            string expected = "samedi 19 septembre 2009";
            string actual;
            actual = Date.RetourneDateConvertie( date );
            Assert.AreEqual( expected, actual, "RetourneDateConvertieTest" );
        }

        /// <summary>
        /// Test pour Mois
        ///</summary>
        [TestMethod()]
        public void MoisTest()
        {
            int numero = 9;
            string expected = "septembre";
            string actual;
            actual = Date.Mois( numero );
            Assert.AreEqual( expected, actual, "MoisTest / 9" );
            //
            numero = 13;
            expected = "mois?";
            actual = Date.Mois( numero );
            Assert.AreEqual( expected, actual, "MoisTest / 13" );

        }

        /// <summary>
        /// Test pour Jours
        ///</summary>
        [TestMethod()]
        public void JoursTest()
        {
            int numero = 0;
            string expected = string.Empty;
            string actual;
            actual = Date.Jours( numero );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour Heure
        ///</summary>
        [TestMethod()]
        public void HeureTest()
        {
            DateTime dateHeure = new DateTime();
            string expected = string.Empty;
            string actual;
            actual = Date.Heure( dateHeure );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour EstBissextile
        ///</summary>
        [TestMethod()]
        public void EstBissextileTest()
        {
            int annee = 0;
            bool expected = false;
            bool actual;
            actual = Date.EstBissextile( annee );
            Assert.AreEqual( expected, actual );

        }


        /// <summary>
        /// Eclate une date correcte.
        /// </summary> 
        [TestMethod()]
        public void EclateDateHeureCorrecte()
        {
            string date = "12/12/1912";
            int jour = 0;
            int jourExpected = 12;
            int mois = 0;
            int moisExpected = 12;
            int annee = 0;
            int anneeExpected = 1912;
            Date.EclateDate( date, out jour, out mois, out annee );
            Assert.AreEqual( jourExpected, jour );
            Assert.AreEqual( moisExpected, mois );
            Assert.AreEqual( anneeExpected, annee ); 
        }

        /// <summary>
        /// Eclate une date incorrecte.
        /// </summary> 
        [TestMethod()]
        public void EclateDateHeureIncorrecte ()
        {
            string date = "32/3/-999";
            int jour = 0;
            int jourExpected = 32;
            int mois = 0;
            int moisExpected = 3;
            int annee = 0;
            int anneeExpected = -999;
            Date.EclateDate( date, out jour, out mois, out annee );
            Assert.AreEqual( jourExpected, jour );
            Assert.AreEqual( moisExpected, mois );
            Assert.AreEqual( anneeExpected, annee );
        }

        /// <summary>
        /// Test pour DatePoint
        ///</summary>
        [TestMethod()]
        public void DatePointTest()
        {
            DateTime dateHeure = new DateTime();
            string expected = string.Empty;
            string actual;
            actual = Date.DatePoint( dateHeure );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour DateMoisAnnee
        ///</summary>
        [TestMethod()]
        public void DateMoisAnneeTest()
        {
            DateTime dateHeure = new DateTime();
            string expected = string.Empty;
            string actual;
            actual = Date.DateMoisAnnee( dateHeure );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour DateMois
        ///</summary>
        [TestMethod()]
        public void DateMoisTest()
        {
            DateTime dateHeure = new DateTime();
            string expected = string.Empty;
            string actual;
            actual = Date.DateMois( dateHeure );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour DateBarre
        ///</summary>
        [TestMethod()]
        public void DateBarreTest()
        {
            string date = string.Empty;
            int tailleAnnee = 0;
            string expected = string.Empty;
            string actual;
            actual = Date.DateBarre( date, tailleAnnee );
            Assert.AreEqual( expected, actual );

        }

        /// <summary>
        /// Test pour Annee
        ///</summary>
        [TestMethod()]
        public void AnneeTest()
        {
            int numero = 0;
            string expected = string.Empty;
            string actual;
            actual = Date.Annee( numero );
            Assert.AreEqual( expected, actual );

        }


        /// <summary>
        /// Chaine date RFC3339 avec date locale correcte heure d'hiver.
        /// </summary> 
        [TestMethod()]
        public void DateRfc3339DateLocaleCorrecteHiver ()
        {
            DateTime dateHeure = new DateTime( 2009,1,1,0,0,0,DateTimeKind.Local);
            string expected = "2009-01-01T00:00:00+01:00";  
            string actual;
            actual = Date.DateRfc3339( dateHeure );
            Assert.AreEqual( expected, actual ); 
        }

        /// <summary>
        /// Chaine date RFC3339 avec date locale correcte heure d'été.
        /// </summary> 
        [TestMethod()]
        public void DateRfc3339DateLocaleCorrecteEte ()
        {
            DateTime dateHeure = new DateTime( 2009, 6, 1, 0, 0, 0, DateTimeKind.Local );
            string expected = "2009-06-01T00:00:00+02:00";
            string actual;
            actual = Date.DateRfc3339( dateHeure );
            Assert.AreEqual( expected, actual );
        }
    }
}
